Jackson এর @JsonView অ্যানোটেশনটি JSON Serialization এবং Deserialization কাস্টমাইজ করার একটি পদ্ধতি। এটি বিভিন্ন কন্টেক্সটে JSON ডেটার বিভিন্ন অংশ প্রকাশ বা লুকানোর জন্য ব্যবহার করা হয়। উদাহরণস্বরূপ, একই মডেল ক্লাস থেকে বিভিন্ন ভিউতে ডেটা প্রকাশ করতে @JsonView অত্যন্ত কার্যকর।
@JsonView এর প্রধান উদ্দেশ্য
- ভিন্ন ভিউ মডেল: একই ক্লাস থেকে বিভিন্ন JSON আউটপুট তৈরি করা।
- ফিল্ড লেভেল কাস্টমাইজেশন: কোন কোন ফিল্ড JSON এ থাকবে তা নির্ধারণ করা।
- Serialization এবং Deserialization: নির্দিষ্ট ভিউ অনুযায়ী ডেটা রিড এবং রাইট করা।
@JsonView এর ব্যবহার ধাপসমূহ
১. ভিউ ইন্টারফেস তৈরি করা
প্রথমে একটি বা একাধিক ভিউ ইন্টারফেস তৈরি করতে হয়, যা নির্ধারণ করবে কোন ফিল্ড কোন ভিউতে যাবে।
public class Views {
public static class Public {}
public static class Internal extends Public {}
}
২. মডেল ক্লাসে @JsonView অ্যাপ্লাই করা
import com.fasterxml.jackson.annotation.JsonView;
public class User {
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Public.class)
private int age;
@JsonView(Views.Internal.class)
private String email;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Views.Public: এই ভিউতে শুধুnameএবংageথাকবে।Views.Internal: এই ভিউতেname,age, এবংemailথাকবে।
৩. ObjectMapper দিয়ে ভিউ ব্যবহার করে Serialization
উদাহরণ ১: Public ভিউ Serialization
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonViewExample {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
ObjectMapper mapper = new ObjectMapper();
// Public ভিউ Serialization
String publicJson = mapper.writerWithView(Views.Public.class).writeValueAsString(user);
System.out.println("Public View: " + publicJson);
}
}
Output:
{"name":"Alice","age":25}
উদাহরণ ২: Internal ভিউ Serialization
// Internal ভিউ Serialization
String internalJson = mapper.writerWithView(Views.Internal.class).writeValueAsString(user);
System.out.println("Internal View: " + internalJson);
Output:
{"name":"Alice","age":25,"email":"alice@example.com"}
৪. Deserialization এ @JsonView ব্যবহার
Deserialization এর সময়ও নির্দিষ্ট ভিউ অনুযায়ী ডেটা পড়া সম্ভব।
String json = "{ \"name\": \"Bob\", \"age\": 30, \"email\": \"bob@example.com\" }";
// Deserialization (Public ভিউ)
User publicUser = mapper.readerWithView(Views.Public.class).forType(User.class).readValue(json);
System.out.println(publicUser.getName()); // Output: Bob
System.out.println(publicUser.getEmail()); // Output: null (লুকানো আছে)
৫. বাস্তব উদাহরণ: REST API তে @JsonView
REST API তে বিভিন্ন রোল ভিত্তিক ডেটা প্রকাশ করতে @JsonView ব্যবহার করা যায়।
Controller উদাহরণ (Spring Framework):
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/public")
@JsonView(Views.Public.class)
public User getPublicUser() {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
return user;
}
@GetMapping("/internal")
@JsonView(Views.Internal.class)
public User getInternalUser() {
User user = new User();
user.setName("Alice");
user.setAge(25);
user.setEmail("alice@example.com");
return user;
}
}
API Output:
GET /public{"name":"Alice","age":25}GET /internal{"name":"Alice","age":25,"email":"alice@example.com"}
@JsonViewব্যবহার করে ডেটার বিভিন্ন ভিউ তৈরি করা যায়, যা API ডেভেলপমেন্টে খুব কার্যকর।- এটি একাধিক ভিউ ইন্টারফেসের মাধ্যমে JSON ফিল্ড নিয়ন্ত্রণ করতে সাহায্য করে।
- Spring Framework এর সাথে একত্রে ব্যবহার করে REST API তে বিভিন্ন স্তরের ডেটা নিরাপত্তা এবং কাস্টমাইজেশন সম্ভব।
Content added By
Read more